home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / macrosrc.arc / FOR.ASM < prev    next >
Encoding:
Assembly Source File  |  1983-11-17  |  1.9 KB  |  63 lines

  1.  
  2. *FOR LOOP
  3. *USES: AC
  4. *
  5. *      FOR  I,S,E,B
  6. *        .
  7. *        .  [LOOP BODY]
  8. *        .
  9. *      NEXT
  10. *
  11. *INIT VARIABLE I TO S, DO BODY IF I #= E
  12. *      S AND E ARE CONSTANTS.
  13. *      TESTS AT THE TOP OF THE LOOP (IN THE FOR).
  14. *      INCREMENT BY B (A + OR - CONSTANT)
  15. *      IF B IS OMITTED, -1 IS ASSUMED.
  16. *      IF E IS OMITTED, 1(or -1) IS ASSUMED.
  17.  
  18.        COPY MACROS.LCAC
  19.        COPY MACROS.NEXT
  20.  
  21. FOR    $MACRO            A,S,E,B   FOR LOOP HEADER
  22.        $IF   B.L=0       DEFLT INCR
  23.        $ASG  '-1'  TO B.S
  24.        $ENDIF
  25.        $VAR I,F,Q,W,WW
  26.        $ASG '$$LPS' TO I.S    GET LOOP CNTXT VAR
  27.        $ASG I.SV+1 TO I.SV    PUSH CNTXT
  28.        $ASG '$$LP' TO Q.S
  29.        $ASG :Q::I.SV: TO I.SS MAKE THIS CNTXT VAR
  30.        $ASG '$$LAB' TO F.S    GET LABEL CNTER
  31.        $ASG F.SV+1 TO F.SV    INCR
  32.        $ASG :I.SS: TO W.S     SAVE THIS CNTXT NAME
  33.        $ASG F.SV TO W.SV      SAVE LABEL VALUE
  34. V$:F.SV: EQU :B:              INCR VALUE
  35.        $ASG 'V$' TO Q.S
  36.        $ASG :Q.S::F.SV: TO WW.S
  37.        LCAC  :S:              LOAD STRING INDEX
  38.        B    F$:W.SV:          BEGIN TEST
  39. I$:W.SV: EQU $                RE-LOOP ENTRY
  40.        $IF  WW.SV=-1          IF INCR IS -1
  41.        LAC  :A:,0             GET INDEX :A:
  42.        SUB  ONE,0             DECR
  43.        $ELSE
  44.        $IF  WW.SV=1           IF INCR IS 1
  45.        LAC  :A:,0             GET INDEX :A:
  46.        ADD  ONE,0             INCR
  47.        $ELSE
  48.        LCAC :B:               GET INCR/DECR
  49.        ADD  :A:,0             ADD TO INDEX :A:
  50.        $ENDIF
  51.        $ENDIF
  52. F$:W.SV: EQU $                BEGIN TEST
  53.        SACL :A:,0             SAVE AC TO INDEX :A:
  54.        $IF  E.L#=0            IF E IS PRESNT
  55.        $IF  WW.SV<0
  56.        LCAC :E:-1             LOAD :E:+1
  57.        $ELSE
  58.        LCAC :E:+1
  59.        $ENDIF
  60.        SUB  :A:,0             COMP TO INDEX :A:
  61.        $ENDIF
  62.        BZ   E$:W.SV:          END LOOP WHEN :A:#=:E:
  63.        $END